package servico;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.faces.model.SelectItem;
import javax.naming.NamingException;

import material.EntidadeMaterial;
import material.Material;
import equipamento.EntidadeEquipamento;
import equipamento.Equipamento;
import util.ServiceLocator;

public class Servicos implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@PostConstruct
	public void iniciar() {
		System.out.println("O Bean Cadastro Funcionario Foi Iniciado");
	}

	@PreDestroy
	public void encerrar() {
		System.out.println("O Bean Cadastro Funcionario foi Encerrado");
	}

	private EntidadeServico servico = new EntidadeServico();
	
	public String servicos = new String();
	public List<EntidadeServico> serv = new ArrayList<EntidadeServico>();
	private List<String> equipamento = new ArrayList<String>();
	private List<Integer> material = new ArrayList<Integer>();
	private List<EntidadeEquipamento> equip = new ArrayList<EntidadeEquipamento>();
	private List<EntidadeMaterial> mat = new ArrayList<EntidadeMaterial>();

	
	public String getServicos() {
		return servicos;
	}

	public void setServicos(String servicos) {
		this.servicos = servicos;
	}

	public List<SelectItem> getServ() throws NamingException {
		Servico servi = (Servico) ServiceLocator
		.getService("servicoBean/remote");
		
		serv = servi.buscaServico();
		List<SelectItem> lista = new ArrayList<SelectItem>();
		for (int i = 0; serv.size() > i; i++) {
			SelectItem item = new SelectItem(serv.get(i).getCodigo(), serv.get(i).getNome());
			lista.add(item);
		}
		return lista;
	}

	public void setServ(List<EntidadeServico> serv) {
		this.serv = serv;
	}

	public EntidadeServico getServico() {
		return servico;
	}

	public List<String> getEquipamento() {
		return equipamento;
	}

	public void setEquipamento(List<String> equipamento) {
		this.equipamento = equipamento;
	}

	public List<Integer> getMaterial() {
		return material;
	}

	public void setMaterial(List<Integer> material) {
		this.material = material;
	}

	public void setServico(EntidadeServico servico) {
		this.servico = servico;
	}

	public List<SelectItem> getEquip() throws NamingException {

		Equipamento equi = (Equipamento) ServiceLocator
				.getService("equipamentoBean/remote");

		List<SelectItem> lista = new ArrayList<SelectItem>();

		equip = equi.buscaEquipamento();
		for (int i = 0; equip.size() > i; i++) {
			SelectItem item = new SelectItem(equip.get(i).getCodigo(), equip
					.get(i).getNome());
			lista.add(item);
		}
		return lista;
	}

	public void setEquip(List<EntidadeEquipamento> equip) {
		this.equip = equip;
	}

	public List<SelectItem> getMat() throws NamingException {
		Material mate = (Material) ServiceLocator
				.getService("materialBean/remote");

		List<SelectItem> lista = new ArrayList<SelectItem>();
		mat = mate.buscaMaterial();
		for (int i = 0; mat.size() > i; i++) {
			SelectItem item = new SelectItem(mat.get(i).getCodigo(), mat.get(i)
					.getNome());
			lista.add(item);
		}
		return lista;
	}

	public void setMat(List<EntidadeMaterial> mat) {
		this.mat = mat;
	}

	public String enviar() throws NamingException {

		Servico serv = (Servico) ServiceLocator
				.getService("servicoBean/remote");
		
		List<String> mat = new ArrayList<String>();
		
		for(int j = 0; material.size() > j; j++)
		{
			mat.add(String.valueOf(material.get(j)));
		}
		
		for (int i = 0; material.size() > i; i++) {
			Item_mat item_mat = new Item_mat();
			item_mat.setCod_mat(Integer.parseInt(mat.get(i)));
			servico.AdicionarMaterial(item_mat);
		}
		for (int i = 0; equipamento.size() > i; i++) {
			Item_equip item_equip = new Item_equip();
			item_equip.setCod_equip(Integer.parseInt(equipamento.get(i)));
			servico.AdicionarServico(item_equip);
		}
		
		if(serv.getCodigo() != 0)
		{
			servico.setCodigo(serv.getCodigo());
			setServico(getServico());
			serv.deleteitens(servico.getCodigo());
			serv.alterarServico(getServico());
		}
		else
		{
			serv.addServico(getServico());
		}
		equipamento.clear();
		material.clear();

		return null;

	}
	public String busca_serv() throws NamingException
	{
		Servico serv = (Servico) ServiceLocator
		.getService("servicoBean/remote");
		
		setServico(serv.buscaServCod(Integer.parseInt(getServicos())));
		setMaterial(serv.getMats(Integer.parseInt((getServicos()))));
		setEquipamento(serv.getEquips(Integer.parseInt(getServicos())));
		
		return null;
	}
	public String deletar() throws NamingException
	{
		Servico serv = (Servico) ServiceLocator
		.getService("servicoBean/remote");
		
		servico.setCodigo(serv.getCodigo());
		serv.excluirServico(getServico());
		return null;
	}

}
